from django.db import models

# Create your models here.
class CCITUser(models.Model):
    # 可以不设置id，Django 会自动设置，若要设置参考下行
    # id = models.AutoField(primary_key=True)
    # 设置用户ID 字符类型 最长度 11  登录时使用  
    # unique如果为True，该字段在整个表格中必须是唯一的
    uID = models.CharField('用户ID', max_length=11, unique=True)
    # 设置用户密码 字符型 最长度 18 ，必须填写 登录时使用
    upwd = models.CharField('密码', max_length=18)
    # 设置用户姓名 字符类型 最长128 可选
    uname = models.CharField('姓名',max_length=128)
    # 设置用户注册时间 格式是：2020-01-01 00:00:00
    uregisteredtime = models.DateTimeField('注册时间',auto_now_add=True)
    # 设置用户邮箱
    uemail = models.CharField('邮箱',max_length=128)
    # 设置用户状态 0 表示离线 1表示在线
    ustatus =  models.CharField('状态',max_length=1)

    # 指定表名： 在model的class中，添加Meta类，在Meta类中指定表名db_table 
    class Meta:
        # verbose_name_plural表示复数形式的显示,若未提供该选项, Django 会使用 verbose_name + "s".
        #  定义复数时的名称（去除复数的s）
        verbose_name_plural = '班级管理多用户'
        # verbose_name指定在admin管理界面中显示中文
        verbose_name = '班级管理用户'
        # 设置保存表时的表名,定义表名
        # db_table = "tag"
        ordering = ['uID']  # 排序

    def __str__(self):
        # 调用时返回自身的属性，不然都是显示xx object
        # 返回 当前用户的 ID
        return self.uID

## 班级数据模型
class AClass(models.Model):
    # 班级ID
    cID = models.CharField('班级ID', max_length=11, unique=True)
    # 班级名称classname
    cn = models.CharField('班级名称', max_length=128)
    # 院系名称
    cETD = models.CharField('学院/系名称', max_length=128)
    '''
    创建外键:
    Django中 建立 ORM的关系等同于在建立数据库表之间的关系
    ORM的关系有
    一对多 models.ForeignKey
    一对一 models.OneToOneField
    多对多 models.ManyToManyField

    ccituser 表 对应多个 aclass 的关系 一对多
    ForeignKey('指定外键指向的表',设置是否是空值默认非空，设置反向查询用，外键（自动关联表的主键）
    '''
    cadmin = models.ForeignKey('CCITUser', null=False, related_name='cls', on_delete=models.CASCADE)

    # 指定表名： 在model的class中，添加Meta类，在Meta类中指定表名db_table 
    class Meta:
        # verbose_name_plural表示复数形式的显示,若未提供该选项, Django 会使用 verbose_name + "s".
        #  定义复数时的名称（去除复数的s）
        verbose_name_plural = '班级管理'
        # verbose_name指定在admin管理界面中显示中文
        verbose_name = '班级'
        # 设置保存表时的表名,定义表名
        db_table = "classes_table"
        ordering = ['cID']  # 排序

    def __str__(self):
        # 调用时返回自身的属性，不然都是显示xx object
        # 返回 当前用户的 ID
        return self.cn

### 学生对象数据模型
class AStudent(models.Model):
    sID = models.CharField('学号',max_length=11, unique=True)
    sname = models.CharField('姓名',max_length=128)
    stel = models.CharField('手机号',max_length=11, unique=True)
    sage = models.CharField('年龄',max_length=3)
    ssex = models.CharField('性别',max_length=1)
    smajor = models.CharField('专业',max_length=128)
    

    '''
    创建外键
    aclass 表 对应多个 astudent的关系 一对多
    ForeignKey('指定外键指向的表',设置是否是空值默认非空，设置反向查询用，外键（自动关联表的主键）
    '''
    aclass = models.ForeignKey('AClass', null=False, related_name='stu', on_delete=models.CASCADE)

    class Meta:
        verbose_name_plural = '学生管理'
        verbose_name = '学生'
        ordering = ['sID']  # 排序

    def __str__(self):
        return "%s:%s" % (self.sID, self.sname)
